package com.christina.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;

/**
 * OpenAPI配置类
 * 
 * @author Christina
 */
@Configuration
public class OpenApiConfig {

    @Value("${server.port:8081}")
    private int serverPort;

    @Value("${spring.servlet.context-path:/api}")
    private String contextPath;

    @Bean
    public OpenAPI customOpenAPI() {
        // 创建服务器信息
        Server server = new Server()
                .url("http://localhost:" + serverPort + contextPath)
                .description("开发环境服务器");

        return new OpenAPI()
                .servers(List.of(server))
                .info(new Info()
                        .title("Christina智能助手API v2.0")
                        .description("""
                                🧠 AI驱动的统一智能处理平台
                                
                                基于Spring Boot 3.5、Spring AI和现代化分层架构的智能助手服务，
                                采用领域驱动设计(DDD)和AI引擎驱动的统一处理模式。
                                
                                ## 🚀 核心特性
                                - **统一智能接口**: 一个API处理所有用户请求
                                - **AI引擎驱动**: 意图识别 + 上下文管理 + 智能决策
                                - **自然语言理解**: 支持中英文对话，智能理解用户需求
                                - **上下文感知**: 记住对话历史，提供个性化服务
                                - **多领域支持**: 聊天、出行规划、任务管理等
                                - **流式处理**: 实时响应，提升用户体验
                                - **高性能架构**: Redis缓存 + RabbitMQ消息队列
                                
                                ## 🏗️ 系统架构
                                ```
                                🧠 AI引擎层
                                ├── 意图识别引擎 (IntentRecognitionEngine)
                                ├── 上下文管理器 (ContextManager)
                                └── 智能决策引擎 (DecisionEngine)
                                
                                🏗️ 业务服务层
                                ├── 聊天领域服务 (ChatDomainService)
                                ├── 出行领域服务 (TravelDomainService)
                                └── 用户领域服务 (UserDomainService)
                                
                                🔧 基础设施层
                                ├── 外部API服务 (ExternalApiService)
                                ├── Redis缓存服务
                                └── RabbitMQ消息队列
                                ```
                                
                                ## 📡 API使用指南
                                
                                ### 🔑 认证流程
                                1. **注册**: `POST /v1/auth/register`
                                2. **登录**: `POST /v1/auth/login` 获取JWT令牌
                                3. **使用**: 请求头添加 `Authorization: Bearer <token>`
                                
                                ### 🎯 核心接口（推荐）
                                - **统一处理**: `POST /v1/christina/process`
                                  ```json
                                  {
                                    "userInput": "你好，我想从北京到上海的出行方案"
                                  }
                                  ```
                                - **流式处理**: `POST /v1/christina/process/stream`
                                - **健康检查**: `GET /v1/christina/health`
                                
                                ### 🔧 测试接口
                                - **基础测试**: `GET /v1/test/hello`
                                - **Redis测试**: `GET /v1/test/redis`
                                - **RabbitMQ测试**: `POST /v1/test/rabbitmq`
                                
                                ### 📦 兼容接口（已弃用）
                                - **任务管理**: `/v1/task/*` (建议使用统一接口)
                                
                                ## 💡 智能对话示例
                                
                                **聊天对话**:
                                ```json
                                {"userInput": "你好，介绍一下你的功能"}
                                ```
                                
                                **出行规划**:
                                ```json
                                {"userInput": "我想明天从北京到上海，帮我规划一下"}
                                ```
                                
                                **任务管理**:
                                ```json
                                {"userInput": "提醒我明天下午3点开会"}
                                ```
                                
                                ## 🔒 安全说明
                                - 所有业务接口都需要JWT认证
                                - 用户数据完全隔离，确保隐私安全
                                - 支持会话上下文管理和清理
                                
                                ## 📊 性能特性
                                - 响应时间 < 500ms
                                - AI处理时间 < 2s
                                - 支持高并发访问
                                - Redis缓存优化
                                """)
                        .version("2.0.0")
                        .contact(new Contact()
                                .name("Christina AI Team")
                                .email("ai-support@christina.com")
                                .url("https://github.com/christina-ai/christina-assistant"))
                        .license(new License()
                                .name("MIT License")
                                .url("https://opensource.org/licenses/MIT")))
                .addSecurityItem(new SecurityRequirement().addList("Bearer Authentication"))
                .components(new io.swagger.v3.oas.models.Components()
                        .addSecuritySchemes("Bearer Authentication",
                                new SecurityScheme()
                                        .type(SecurityScheme.Type.HTTP)
                                        .scheme("bearer")
                                        .bearerFormat("JWT")
                                        .description("请在此处输入JWT令牌（不需要Bearer前缀）")));
    }
}